package com.elm.controller;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import com.elm.model.Food;
import com.elm.model.Seller;
import com.elm.service.FoodService;
import com.elm.serviceimpl.FoodServiceImpl;

public class InsertFoodController extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
	// TODO Auto-generated method stub
	doPost(req, resp);
}
@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
	req.setCharacterEncoding("utf8");
	resp.setCharacterEncoding("utf8");
	   PrintWriter  pw =  resp.getWriter();
	   HttpSession   session = req.getSession();
	   Seller seller=(Seller) session.getAttribute("currentSeller");
	   
	   int sellerid=seller.getSellerid();
	   String foodname ="";//名称
	   String foodprice ="";//价格
	   String foodgenre = "";//种类
	  String foodimg ="";
		String savePath ="C:\\img";
		
		File file = new File(savePath);
		//判断上传文件的保存目录是否存在
		if (!file.exists() && !file.isDirectory()) {
		
		//创建目录
		file.mkdir();
		}
		//消息提示
		String message = "";
	
		try{
		//使用Apache文件上传组件处理文件上传步骤：
		//1、创建一个DiskFileItemFactory工厂
		DiskFileItemFactory factory = new DiskFileItemFactory();
		//2、创建一个文件上传解析器
		ServletFileUpload upload = new ServletFileUpload(factory);
		//解决上传文件名的中文乱码
		upload.setHeaderEncoding("UTF-8"); 
		//3、判断提交上来的数据是否是上传表单的数据
		if(!ServletFileUpload.isMultipartContent(req)){
		//按照传统方式获取数据
		return;
		}
		//4、使用ServletFileUpload解析器解析上传数据，解析结果返回的是一个List<FileItem>集合，每一个FileItem对应一个Form表单的输入项
		List<FileItem> list = upload.parseRequest(req);
		for(FileItem item : list){
		//如果fileitem中封装的是普通输入项的数据
		if(item.isFormField()){
			 String name =item.getFieldName(); //获取form表单中name的id
                if("foodname".equals(name))  
                	foodname=item.getString("utf-8");
                //item是指定id的value值，此处用       item.getString("utf-8")是把item用utf-8解析，根据你的需要可以用其他的，如：gbk；
                else if("foodprice".equals(name))
                	foodprice=item.getString("utf-8");
                else if("foodgenre".equals(name))
                	foodimg=item.getString("utf-8");       
		}else{//如果fileitem中封装的是上传文件
		//得到上传的文件名称，
		String filename = item.getName();
		
		if(filename==null || filename.trim().equals("")){
		continue;
		}
		//注意：不同的浏览器提交的文件名是不一样的，有些浏览器提交上来的文件名是带有路径的，如： c:\a\b\1.txt，而有些只是单纯的文件名，如：1.txt
		//处理获取到的上传文件的文件名的路径部分，只保留文件名部分
		filename = filename.substring(filename.lastIndexOf("\\")+1);
		//获取item中的上传文件的输入流
		InputStream in = item.getInputStream();
		//创建一个文件输出流
		FileOutputStream out = new FileOutputStream(savePath + "\\" + filename);
		//创建一个缓冲区
		byte buffer[] = new byte[1024];
		//判断输入流中的数据是否已经读完的标识
		int len = 0;
		//循环将输入流读入到缓冲区当中，(len=in.read(buffer))>0就表示in里面还有数据
		while((len=in.read(buffer))>0){
		//使用FileOutputStream输出流将缓冲区的数据写入到指定的目录(savePath + "\\" + filename)当中
		out.write(buffer, 0, len);
		}
		foodgenre =  "\\" + filename;
		//关闭输入流
		in.close();
		//关闭输出流
		out.close();
		//删除处理文件上传时生成的临时文件
		item.delete();
		message = "文件上传成功！";
		}
		}
		}catch (Exception e) {
		message= "文件上传失败！";
		e.printStackTrace();			 
		}
	  Food food=new Food(foodname, foodprice, foodgenre,foodimg);

      FoodService foodService=new FoodServiceImpl();
      int flag=foodService.insertFood(food, sellerid); 
          pw.write(String.valueOf(flag)); 
	}
}
